home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 081-090 / amok89 / amigaguide / amigaguide.mod next >
Text File  |  1993-11-04  |  14KB  |  411 lines

  1. MODULE AmigaGuide;
  2.  
  3. (*---------------------------------------------------------------------------
  4. ** AmigaGuide v1.24 (34.6)  --    Oberon System Interface Modul
  5. **---------------------------------------------------------------------------
  6. ** Oberon: Amiga-Oberon v3.00, F. Siebert / A+L AG
  7. **---------------------------------------------------------------------------
  8. ** 14-Apr-93 [lars]
  9. **---------------------------------------------------------------------------
  10. ** Known problems:
  11. **  - The second parameter of OpenAmigaGuideAsync() is either a tag list
  12. **    (so say the includes) or a dummy for future use (so says the autodocs).
  13. **  - Several functions of the library are mentioned in the includes, but
  14. **    not in the autodocs.
  15. **  - The XRef node embodies a 'struct DocFile *' without 'struct DocFile'
  16. **    being defined anywhere.
  17. **---------------------------------------------------------------------------
  18. *)
  19.  
  20. IMPORT Dos, Exec, InputEvent, Intuition, sys:SYSTEM, Utility;
  21.  
  22. (*-------------------------------------------------------------------------*)
  23.  
  24. TYPE
  25.  
  26. (* Pointers: *)
  27.   AmigaGuideContext  * = sys.ADDRESS;
  28.   AmigaGuideHostPtr  * = UNTRACED POINTER TO AmigaGuideHost;
  29.   AmigaGuideMsgPtr   * = UNTRACED POINTER TO AmigaGuideMsg;
  30.   ContextTablePtr    * = UNTRACED POINTER TO ContextTable;
  31.   MethodPtr         * = UNTRACED POINTER TO Method;
  32.   Msg             * = MethodPtr;              (* The official name *)
  33.     OpFindHostPtr    * = UNTRACED POINTER TO OpFindHost;
  34.     OpNodeIOPtr      * = UNTRACED POINTER TO OpNodeIO;
  35.     OpExpungeNodePtr * = UNTRACED POINTER TO OpExpungeNode;
  36.   NewAmigaGuidePtr   * = UNTRACED POINTER TO NewAmigaGuide;
  37.   XRefPtr         * = UNTRACED POINTER TO XRef;
  38.  
  39.  
  40. CONST
  41.  
  42. (* Various *)
  43.   name * = "amigaguide.library";
  44.  
  45.   alted   * = { InputEvent.lAlt, InputEvent.rAlt };
  46.   shifted * = { InputEvent.lShift, InputEvent.rShift };
  47.  
  48.  
  49. (* Tag attributes accepted by GetAmigaGuideAttr() *)
  50.   dummy    * = Utility.user;
  51.  
  52.   path       * = dummy + 1;
  53.   xrefList * = dummy + 2;
  54.   activate * = dummy + 3;
  55.  
  56.  
  57. TYPE
  58.  
  59.   AmigaGuideMsg * = STRUCT (msg * : Exec.Message)
  60.     type    * : Exec.ULONG;        (* Type of message *)
  61.     data    * : Exec.APTR;        (* Pointer to message data *)
  62.     dSize   * : Exec.ULONG;        (* Size of message data *)
  63.     dType   * : Exec.ULONG;        (* Type of message data *)
  64.     priRet  * : Exec.ULONG;        (* Primary return value *)
  65.     secRet  * : Exec.ULONG;        (* Secondary return value *)
  66.     system1 * : Exec.APTR;
  67.     system2 * : Exec.APTR;
  68.   END;
  69.  
  70.  
  71. CONST
  72.  
  73. (* AmigaGuideMsg.type *)
  74.   apshToolID * = 11000;
  75.  
  76.   startupMsgID       * = apshToolID + 1;         (* Startup message *)
  77.   loginToolID       * = apshToolID + 2;         (* Login a tool SIPC port *)
  78.   logoutToolID       * = apshToolID + 3;         (* Logout a tool SIPC port *)
  79.   shutdownMsgID    * = apshToolID + 4;         (* Shutdown message *)
  80.   activateToolID   * = apshToolID + 5;         (* Activate tool *)
  81.   deactivateToolID * = apshToolID + 6;         (* Deactivate tool *)
  82.   activeToolID       * = apshToolID + 7;         (* Tool Active *)
  83.   inactiveToolID   * = apshToolID + 8;         (* Tool Inactive *)
  84.   toolStatusID       * = apshToolID + 9;         (* Status message *)
  85.   toolCmdID       * = apshToolID + 10;      (* Tool command message *)
  86.   toolCmdReplyID   * = apshToolID + 11;      (* Reply to tool command *)
  87.   shutdownToolID   * = apshToolID + 12;      (* Shutdown tool *)
  88.  
  89.  
  90. TYPE
  91.  
  92. (* Allocation description structure *)
  93.   NewAmigaGuide * = STRUCT
  94.     lock       * : Dos.FileLockPtr;       (* Lock on the document directory *)
  95.     name       * : Exec.STRPTR;        (* Name of document file *)
  96.     screen     * : Intuition.ScreenPtr;    (* Screen to place windows within *)
  97.     pubScreen  * : Exec.STRPTR;        (* Public screen name to open on *)
  98.     hostPort   * : Exec.STRPTR;        (* Application's ARexx port name *)
  99.     clientPort * : Exec.STRPTR;        (* Name to assign to the clients ARexx port *)
  100.     baseName   * : Exec.STRPTR;        (* Base name of the application *)
  101.     flags      * : LONGSET;           (* Flags *)
  102.     context    * : ContextTablePtr;       (* NIL terminated context table *)
  103.     node       * : Exec.STRPTR;        (* Node to align on first (defaults to Main) *)
  104.     line       * : LONGINT;           (* Line to align on *)
  105.     extens     * : Utility.TagItemPtr;       (* Tag array extension *)
  106.     client     * : sys.ADDRESS;        (* Private! MUST be NULL *)
  107.   END;
  108.  
  109.  
  110. (* The ContextTable in NewAmigaGuide is an array of Exec.STRPTRs, terminated
  111.  * by a NIL pointer.
  112.  * This definition keeps the array character, but can't be allocated
  113.  * directly with NEW()!
  114.  *)
  115.   ContextTable * = ARRAY 536870911 OF Exec.STRPTR;
  116.  
  117.  
  118. CONST
  119.  
  120. (* public Client flags (NewAmigaGuide.flags) *)
  121.   loadIndex  * = 0;    (* Force load the index at init time *)
  122.   loadAll    * = 1;    (* Force load the entire database at init *)
  123.   cacheNode  * = 2;    (* Cache each node as visited *)
  124.   cacheDB    * = 3;    (* Keep the buffers around until expunge *)
  125.   unique     * = 15;    (* Unique ARexx port name *)
  126.   noActivate * = 16;    (* Don't activate window *)
  127.   sysGads    * = 31;
  128.  
  129.  
  130. (* Callback function ID's *)
  131.   open    * = 0;
  132.   close * = 1;
  133.  
  134.  
  135. (* Callback error codes *)
  136.   notEnoughMemory  * = 100;
  137.   cantOpenDataBase * = 101;
  138.   cantFindNode       * = 102;
  139.   cantOpenNode       * = 103;
  140.   cantOpenWindow   * = 104;
  141.   invalidCommand   * = 105;
  142.   cantComplete       * = 106;
  143.   portClosed       * = 107;
  144.   cantCreatePort   * = 108;
  145.   keywordNotFound  * = 113;
  146.  
  147.  
  148. TYPE
  149.  
  150. (* Cross reference node *)
  151.   XRef * = STRUCT (node * : Exec.Node)
  152.     pad  * : Exec.UWORD;     (* Padding *)
  153.     df     * : Exec.ADDRESS;   (* Document defined in ('DocFilePtr') *)
  154.     file * : Exec.STRPTR;    (* Name of document file *)
  155.     name * : Exec.STRPTR;    (* Name of item *)
  156.     line * : LONGINT;         (* Line defined at *)
  157.   END;
  158.  
  159.  
  160. CONST
  161.  
  162.   XRSize * = SIZE (XRef);    (* A neato... *)
  163.  
  164. (* Types of cross reference nodes *)
  165.   generic  * = 0;
  166.   function * = 1;
  167.   command  * = 2;
  168.   include  * = 3;
  169.   macro    * = 4;
  170.   struct   * = 5;
  171.   field    * = 6;
  172.   typedef  * = 7;
  173.   define   * = 8;
  174.  
  175.  
  176. TYPE
  177.  
  178. (* Callback handle *)
  179.   AmigaGuideHost * = STRUCT (dispatcher * : Utility.Hook)
  180.     reserved   * : Exec.ULONG;     (* Must be 0 *)
  181.     flags      * : LONGSET;
  182.     useCnt     * : Exec.ULONG;     (* Number of open nodes *)
  183.     systemData * : Exec.APTR;     (* Reserved for system use *)
  184.     userData   * : Exec.APTR;     (* Anything you want... *)
  185.   END;
  186.  
  187.  
  188. CONST
  189.  
  190. (* methodIDs of the various commands *)
  191.   findNode  * = 1;
  192.   openNode  * = 2;
  193.   closeNode * = 3;
  194.   expunge   * = 10;   (* Expunge DataBase *)
  195.  
  196.  
  197. TYPE
  198.  
  199. (* Basetype of the command structures *)
  200.   Method * = STRUCT
  201.     ID * : Exec.ULONG;
  202.   END;
  203.  
  204.  
  205. (* Method 'findNode' *)
  206.   OpFindHost * = STRUCT (method * : Method)
  207.     attrs * : Utility.TagItemPtr;    (*  R: Additional attributes *)
  208.     node  * : Exec.STRPTR;         (*  R: Name of node *)
  209.     toc   * : Exec.STRPTR;         (*  W: Table of Contents *)
  210.     title * : Exec.STRPTR;         (*  W: Title to give to the node *)
  211.     next  * : Exec.STRPTR;         (*  W: Next node to browse to *)
  212.     prev  * : Exec.STRPTR;         (*  W: Previous node to browse to *)
  213.   END;
  214.  
  215.  
  216. (* Methods 'openNode', 'closeNode' *)
  217.   OpNodeIO * = STRUCT (method * : Method)
  218.     attrs     * : Utility.TagItemPtr;     (*  R: Additional attributes *)
  219.     node      * : Exec.STRPTR;         (*  R: Node name and arguments *)
  220.     fileName  * : Exec.STRPTR;         (*  W: File name buffer *)
  221.     docBuffer * : Exec.STRPTR;         (*  W: Node buffer *)
  222.     buffLen   * : Exec.ULONG;         (*  W: Size of buffer *)
  223.     flags     * : LONGSET;         (* RW: Control flags *)
  224.   END;
  225.  
  226.  
  227. CONST
  228.  
  229. (* NodeIO.flags *)
  230.   keep        * = 0;    (* Don't flush this node until database is closed. *)
  231.   reserved1 * = 1;    (* Reserved for system use *)
  232.   reserved2 * = 2;    (* Reserved for system use *)
  233.   ascii     * = 3;    (* Node is straight ASCII *)
  234.   reserved3 * = 4;    (* Reserved for system use *)
  235.   clean     * = 5;    (* Remove the node from the database *)
  236.   done        * = 6;    (* Done with node *)
  237.  
  238. (* NodeIO.attrs (Tag IDs) *)
  239.   screen    * = Utility.user + 1;    (* Screen that window resides in *)
  240.   pens        * = Utility.user + 2;    (* Pen array (from DrawInfo) *)
  241.   rectangle * = Utility.user + 3;    (* Window box *)
  242.  
  243.  
  244. TYPE
  245.  
  246. (* Method 'expunge' *)
  247.   OpExpungeNode * = STRUCT (method * : Method)
  248.     attrs * : Utility.TagItemPtr;    (*  R: Additional attributes *)
  249.   END;
  250.  
  251.  
  252. (*-------------------------------------------------------------------------*)
  253.  
  254. VAR
  255.   base * : Exec.LibraryPtr;
  256.  
  257.  
  258. (* ----- Open/Close/Lock ----- *)
  259. PROCEDURE OpenAmigaGuide * {base, -54}
  260.                ( nag{8} : NewAmigaGuide;
  261.                  control{9} : Exec.MsgPortPtr
  262.                ) : AmigaGuideContext;
  263. PROCEDURE OpenAmigaGuideAsyncA * {base, -60}
  264.                ( nag{8} : NewAmigaGuide;
  265.                  attrs{0} : ARRAY OF Utility.TagItem
  266.                ) : AmigaGuideContext;
  267. PROCEDURE OpenAmigaGuideAsync * {base, -60}
  268.                ( nag{8} : NewAmigaGuide;
  269.                  attrs{0}.. : Utility.Tag
  270.                ) : AmigaGuideContext;
  271. PROCEDURE CloseAmigaGuide * {base, -66} ( handle{8} : AmigaGuideContext );
  272. PROCEDURE ExpungeDataBases * {base, -48} ( flush{0} : BOOLEAN );
  273. PROCEDURE LockAmigaGuideBase * {base, -36} ( handle{8} : AmigaGuideContext )
  274.                        : LONGINT;
  275. PROCEDURE UnlockAmigaGuideBase * {base, -42} ( key{0} : LONGINT );
  276.  
  277. (* ----- Message handling ----- *)
  278. PROCEDURE AmigaGuideSignal * {base, -72} ( handle{8} : AmigaGuideContext )
  279.                      : LONGSET;
  280. PROCEDURE GetAmigaGuideMsg * {base, -78} ( handle{8} : AmigaGuideContext )
  281.                      : AmigaGuideMsgPtr;
  282. PROCEDURE ReplyAmigaGuideMsg * {base, -84} ( msg{8} : AmigaGuideMsgPtr );
  283.  
  284. PROCEDURE SendAmigaGuideCmd * {base, -102}
  285.                   ( handle{8} : AmigaGuideContext;
  286.                 cmd{0} : ARRAY OF CHAR;
  287.                 future{1} : LONGINT
  288.                   ) : BOOLEAN;
  289.  
  290. (* ----- Contexts ----- *)
  291. PROCEDURE SetAmigaGuideContext * {base, -90}
  292.                  ( handle{8} : AmigaGuideContext;
  293.                    context{0} : Exec.ULONG;
  294.                    future{1} : LONGINT
  295.                  ) : BOOLEAN;
  296. PROCEDURE SendAmigaGuideContext * {base, -96}
  297.                   ( handle{8} : AmigaGuideContext;
  298.                     future{0} : LONGINT
  299.                   ) : BOOLEAN;
  300.  
  301. (* ----- Attributes ----- *)
  302. PROCEDURE SetAmigaGuideAttrs * {base, -108}
  303.                    ( handle{8} : AmigaGuideContext;
  304.                  attrs{9}.. : Utility.Tag
  305.                    ) : LONGINT;
  306. PROCEDURE SetAmigaGuideAttrsA * {base, -108}
  307.                 ( handle{8} : AmigaGuideContext;
  308.                   attrs{9} : ARRAY OF Utility.TagItem
  309.                 ) : LONGINT;
  310. PROCEDURE GetAmigaGuideAttr * {base, -114}
  311.                   (     tag{0} : Utility.Tag;
  312.                     handle{8} : AmigaGuideContext;
  313.                 VAR storage{9} : ARRAY OF Exec.BYTE
  314.                   ) : LONGINT;
  315.  
  316. (* ----- Crossreferences ----- *)
  317. PROCEDURE LoadXRef * {base, -126}
  318.              ( lock{8} : Dos.FileLockPtr;
  319.                name{9} : Exec.STRPTR
  320.              ) : LONGINT;
  321. PROCEDURE ExpungeXRef * {base, -132} ();
  322.  
  323. (* ----- Callback management ----- *)
  324. PROCEDURE AddAmigaGuideHost * {base, -138}
  325.                   ( hook{8} : Utility.Hook;
  326.                 name{0} : ARRAY OF CHAR;
  327.                 attrs{9}.. : Utility.Tag
  328.                   ) : AmigaGuideHostPtr;
  329. PROCEDURE AddAmigaGuideHostA * {base, -138}
  330.                   ( hook{8} : Utility.Hook;
  331.                 name{0} : ARRAY OF CHAR;
  332.                 attrs{9} : ARRAY OF Utility.TagItem
  333.                   ) : AmigaGuideHostPtr;
  334. PROCEDURE RemoveAmigaGuideHost * {base, -144}
  335.                  ( key{8} : AmigaGuideHostPtr;
  336.                    attrs{9}.. : Utility.Tag
  337.                  ) : LONGINT;
  338. PROCEDURE RemoveAmigaGuideHostA * {base, -144}
  339.                  ( key{8} : AmigaGuideHostPtr;
  340.                    attrs{9} : ARRAY OF Utility.TagItem
  341.                  ) : LONGINT;
  342.  
  343. (* ----- Environment searches ------- *)
  344. PROCEDURE OpenE * {base, -150}
  345.           ( path{8} : Dos.BSTR;
  346.             name{1} : ARRAY OF CHAR;
  347.             accessMode{2} : LONGINT
  348.           ) : Dos.FileHandlePtr;
  349.  
  350. PROCEDURE LockE * {base, -156}
  351.           ( path{8} : Dos.BSTR;
  352.             name{1} : ARRAY OF CHAR;
  353.             accessMode{2} : LONGINT
  354.           ) : Dos.FileLockPtr;
  355.  
  356. (*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*)
  357. (* OBSOLETE - DON'T USE! *)
  358. PROCEDURE SetAmigaGuideHook * {base, -120}  (* OBSOLETE *)
  359.                   ( handle{8} : AmigaGuideContext;
  360.                 kind{0} : Exec.ULONG;
  361.                 hook{9} : PROCEDURE;
  362.                 data{10} : Exec.ADDRESS
  363.                   ) : BOOLEAN;
  364.  
  365. (*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*)
  366. (* I found no docs about these functions - they seem to be private :-/
  367.  * Could someone please verify?
  368.  *)
  369.  
  370. (* PROCEDURE RLDispatch {base, -30} (p1,p2)(D0/D1) *)
  371. PROCEDURE CopyPathList * {base, -162} ( path{8} : Dos.BSTR ) : Dos.BSTR;
  372. PROCEDURE AddPathEntries * {base, -168}
  373.                ( path{8} : Dos.BSTR;
  374.                  names{0} : ARRAY OF Exec.STRPTR
  375.                ) : Dos.BSTR;
  376.  
  377. PROCEDURE FreePathList * {base, -174} ( path{8} : Dos.BSTR );
  378. PROCEDURE ParsePathString * {base, -180}
  379.                 ( string{0} : ARRAY OF CHAR;
  380.                   names{8} : ARRAY OF Exec.STRPTR;
  381.                   max{9} : Exec.ULONG
  382.                 ) : Exec.ULONG;
  383. PROCEDURE OpenDataBase * {base, -186}
  384.              ( lock{8} : Dos.FileLockPtr;
  385.                name{9} : ARRAY OF CHAR
  386.              ) : Exec.APTR;
  387. PROCEDURE LoadNode * {base, -192}
  388.              ( client{8} : Exec.APTR;
  389.                database{9} : Exec.APTR;
  390.                node{10} : Exec.APTR
  391.              ) : LONGINT;
  392. PROCEDURE UnloadNode * {base, -198}
  393.                ( client{8} : Exec.APTR;
  394.              database{9} : Exec.APTR;
  395.              node{10} : Exec.APTR
  396.                ) : LONGINT;
  397. PROCEDURE CloseDataBase * {base, -204} (database{8} : Exec.APTR) : LONGINT;
  398. PROCEDURE GetAmigaGuideString * {base, -210} (id{0} : LONGINT) : Exec.STRPTR;
  399.  
  400. (*-------------------------------------------------------------------------*)
  401.  
  402. (* $StackChk- $RangeChk- $NilChk- $OvflChk- $ReturnChk- $CaseChk- *)
  403.  
  404. BEGIN
  405.   base := Exec.OpenLibrary (name, 33);
  406. CLOSE
  407.   IF base # NIL THEN Exec.CloseLibrary (base); END;
  408. END AmigaGuide.
  409.  
  410. (***************************************************************************)
  411.